if ( !window.controller ) throw new Error( '"controller" not initialized' );
if(!controller.user.item){
	controller.user.item = ( function(){
		var $ = controller;
		
		var Item = function(data){
			ItemSuperPrototype.constructor.call( this );
			for(var i in data){
				this._setData(i, data[i]);
			}
		}

		$.extend( Item, $.events.EventDispatcher );
		var ItemPrototype 		= Item.prototype,
			ItemSuperPrototype  = Item.superPrototype;
			
		
		var dispatchEvent= ItemSuperPrototype.dispatchEvent;
		var EEvent = $.events.Event;
		
		ItemPrototype._id 		 	= null; // - Уникальный ID Предмета
		ItemPrototype._user_id 		= null; // - ID хозяина предмета
		ItemPrototype._item_id 		= null; // - ID предмета в класификаторе предметов
		ItemPrototype._item_grade	= null; // - Текущий уровень грейда предмета
		ItemPrototype._name 		= null; // - Название предмета
		ItemPrototype._description 	= null; // - Описание предмета
		ItemPrototype._place 		= null; // - Текущее его место нахождения
		ItemPrototype._stackable 	= null; // - Пачкуется ли
		ItemPrototype._count 		= null; // - Количество
		ItemPrototype._transfered	= null; // - Передаваемый 
		ItemPrototype._durability	= null; // - Долговечность
		ItemPrototype._inventory_id = null; // - ID инвентаря
		ItemPrototype._category_id	= null; // - ID Категори
		ItemPrototype._life_time  	= null; // - Время жизни
		ItemPrototype._creat_date 	= null; // - Время создания
		ItemPrototype._use 		 	= null; // - В какой слот и как юзается 
		ItemPrototype._user_level 	= null; // - Минимальный уровень юзера
		ItemPrototype._grades 	 	= null; // - Количество грейдов
		ItemPrototype._working_life = null; // - Время работы после использования
		ItemPrototype._enchant 	 	= null; // - Встройки
		ItemPrototype._enchant_count= null; // - Количество возможных встроек
		ItemPrototype._trofey 	 	= null; // - Трофейный ли предмем
		ItemPrototype._stat 		= null; // - Статы предмета
		ItemPrototype._property 	= null; // - Свойства предмета
		
		
		ItemPrototype._setData = function(p, data){
			var pName = "_"+p;
			if(this[pName] == null){
				this[pName] = data;
			}
		}
		
		
		
		ItemPrototype.update = function(data){
			var change = {};
			for(var p in data){
				var pName = "_"+p;
				
				if(this[pName] != data[p]){
					change[p] = data[p];
					this[pName] = data[p];
				}
			}
			if(Object.keys(change).length > 0){
				var event  = new EEvent("ITEM_UPDATE");
					event.data = {"id": this._id, "change": change};
					dispatchEvent.call(this, event);
			}
		}
		
		ItemPrototype.get = function(name){
			var pName = "_"+name;
			if(this[pName]){
				return this[pName];
			}
			return null;
		}
		
		return Item;
	}());
	
	controller.user.item.Inventory = 
			{
				1: "Экипировка",
				2: "Приемы",
				3: "Допинги",
				4: "Ресурсы",
				5: "Встройки"/*,
				6: "Колекционные предметы"*/
			};
	controller.user.item.userSlots = 
			{
				1  : "Шапка",
				2  : "Верхняя одежда",
				3  : "Ремни",
				4  : "Штаны",
				5  : "Ботинки",
				6  : "Аксессуары",
				7  : "Оружие",
				8  : "Вторая рука",
				9  : "Парфюм",
				10 : "Кольца"};
				
	controller.user.item.List = item_base;	
}